/*
	Driver.java
	Autor: Jennifer Pamela Valdez Cabrera
	Carne: 10189
	Fecha de entrega: 14 de Julio de 2011
	Descripcion: Es el programa principal, donde se crea el objeto radio e interactua con el usuario
*/


import java.util.*;

public class Driver{

	public static void main(String[] args){

		//declaracion de objetos
		Radio mi_radio;
		
		//declaracion de variables
		int opcion;
		int num_memoria;
		boolean error;
		boolean encendido = false;
		
		//creacion del objeto
		mi_radio = new Radio();
		
		descripcion();
		
		do{
			menu();
			opcion = pedirNumero("\nSeleccione una opcion:");
			if (opcion == 1){	//encender-apagar
				mi_radio.power();
				encendido = !encendido;
				if (encendido){
					System.out.println("\n Usted ha encendido el radio! \n");
					System.out.println(mi_radio.toString());
				}
				else
					System.out.println("\n Usted ha apagado el radio! \n");
			}
			else	
				if ((!encendido) && (opcion != 7))  //si esta apagado o presiona salir muestra un mensaje
					System.out.println("\n El radio se encuentra apagado!!! \n");
				else
					switch(opcion){
						case 2: //cambio de AM a FM y viceversa
							mi_radio.cambio();
							System.out.println(mi_radio.toString());
							break;
						case 3: //avanzar la emisora
							mi_radio.fw();
							System.out.println(mi_radio.toString());
							break;
						case 4: //retroceder la emisora
							mi_radio.bw();
							System.out.println(mi_radio.toString());
							break;
						case 5: //guardar emisora en memoria
							error = true;
							do{
								num_memoria = pedirNumero("\nIngrese el numero de memoria donde desea guardar la emisora: (1-12)");
								if ((num_memoria >= 1) && (num_memoria <= 12))
									error = false;
								if (error)
									System.out.println("\n ERROR --> ESE NUMERO DE MEMORIA NO ES VALIDO \n");
							}while (error);
							mi_radio.store(num_memoria);
							System.out.println(mi_radio.toString());
							break;
						case 6: //llamar una emisora de memoria
							error = true;
							do{
								num_memoria = pedirNumero("\nIngrese el numero de memoria que desee sintonizar: (1-12)");
								if ((num_memoria >= 1) && (num_memoria <= 12))
									error = false;
								if (error)
									System.out.println("\n ERROR --> ESE NUMERO DE MEMORIA NO ES VALIDO \n");
								
							}while (error);
							mi_radio.select(num_memoria);
							System.out.println(mi_radio.toString());
							break;
						case 7: //salir
							System.out.println("\n ADIOS \n");
							break;
						default:
							System.out.println("\n ERROR --> ESA OPCION NO EXISTE \n");
							break;
					}
		} while (opcion != 7); 
		
	}
	
	//menu: muestra en pantalla el menu principal para el usuario
	//no posee parametros y no devuelve ningun valor
	public static void menu(){
		System.out.println();
		System.out.println("+-------   MENU   -------------------+");
        System.out.println("| 1. Encender/Apagar                 |");
        System.out.println("| 2. Cambiar de AM a FM y viceversa  |");
        System.out.println("| 3. >> Avanzar la emisora           |");
		System.out.println("| 4. << Retrasar la emisora          |");
		System.out.println("| 5. Guardar emisora en memoria      |");
		System.out.println("| 6. Llamar una emisora de memoria   |");
		System.out.println("| 7. Salir de la radio               |");
        System.out.println("+------------------------------------+");
	}
	
	//descripcion: muestra en pantalla una descripcion del programa para el usuario
	//no posee parametros y no devuelve ningun valor
	public static void descripcion(){
		System.out.println();
		System.out.println("+--   BIENVENIDO   ----------------------------+");
        System.out.println("|  En esta radio usted puede escoger entre las |");
        System.out.println("| 7 opciones del menu, inicialmente el radio   |");
        System.out.println("| esta apagado. Posee 12 memorias disponibles  |");
		System.out.println("| para cada frecuencia que inicialmente no     |");
		System.out.println("| poseen ninguna emisora guardada.             |");
        System.out.println("+----------------------------------------------+");
	}
	
	//pedirOpcion: pide el numero de la opcion ya validado
	//parametro tipo String que es la pregunta previa a que el usuario introduzca el numero
	//devuelve el entero con el valor
	public static int pedirNumero(String texto){
        Scanner readln = new Scanner(System.in);
		int numero = 0;
		try{
			System.out.println(texto);
			numero = readln.nextInt();
		}
		catch(InputMismatchException exception){
			System.out.println("\n ERROR --> NUMERO NO VALIDO \n");
		}
		readln.nextLine();
        return numero;
    }
	
}
